﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

namespace NPortableEngine
{
    #region Scouter

    [EditorBrowsable(EditorBrowsableState.Never)]
    public interface IHeaderSetter : IFluentInterface
    {
        IParameterSetter Header(Dictionary<string, object> headerDic);
    }

    [EditorBrowsable(EditorBrowsableState.Never)]
    public interface IParameterSetter : IFluentInterface
    {
        IDecompressSetter Params(Dictionary<string, object> bodyDic);
    }

    [EditorBrowsable(EditorBrowsableState.Never)]
    public interface IDecompressSetter : IFluentInterface
    {
        IStringParserSetterAndIReqModeSetter Decompress(Func<Stream, byte[]> decompressAction);
    }

    [EditorBrowsable(EditorBrowsableState.Never)]
    public interface IStringParserSetter : IFluentInterface
    {
        IReqModeSetter Parse(NParser parser);
    }

    [EditorBrowsable(EditorBrowsableState.Never)]
    public interface IReqModeSetter : IFluentInterface
    {
        IExecutorSetter InMode(ReqMode mode);
    }

    //[EditorBrowsable(EditorBrowsableState.Never)]
    //public interface ICancellationTokenSetter : IFluentInterface
    //{
    //    IExecutorSetter WithCancellationToken(CancellationToken token);
    //}

    [EditorBrowsable(EditorBrowsableState.Never)]
    public interface IExecutorSetter : IFluentInterface
    {
        Task<ScouterBackData> Fly(Type djangoType);
    }

    [EditorBrowsable(EditorBrowsableState.Never)]
    public interface IStringParserSetterAndIReqModeSetter : IFluentInterface, IStringParserSetter, IReqModeSetter
    {

    }

    [EditorBrowsable(EditorBrowsableState.Never)]
    public interface IScouter : IFluentInterface, IHeaderSetter, IParameterSetter, IDecompressSetter, IExecutorSetter, IStringParserSetterAndIReqModeSetter
    {

    }

    #endregion

    #region StreamScouter

    [EditorBrowsable(EditorBrowsableState.Never)]
    public interface IStreamScouter : IFluentInterface, IExecutorSetter
    {

    }

    #endregion
    
}
